| TOP | スクリプト解説 | リンク | ご意見板 |


98Like!別館
敵を表示してみよう
98Like!本館はコチラ




さあ、自機の表示と移動・自機弾の表示と移動が上手く出来たので、次は敵の表示をしてみましょう♪

まず2行目にスクリプトを見やすく・分かりやすくする為に、よく使う
『ENEMYMAX』と言うマクロを定義します。(あくまでも分かりやすくする為ですので、『ENEMYMAX=12』の様に変数扱いとしても同様の結果になります)

次に
『*SYOKIKA』の部分に『lv=1』を追加します。これは今後レベル(面構成)を考える上で必要と思われる変数です。

次に
『*MAIN』メインルーチンですが、ココにも1つサブルーチン『gosub *TEKI』を追加します。サブルーチンに飛んで敵を描画します。

さあ、『*TEKI』ココからが今回のメイン。
まず、敵は複数(今回は12機)存在するので『
repeat〜loop』を使用して表示する敵の数だけループさせます。
次に、システム変数『
cnt』を使って各敵に敵が存在するフラッグを立て『ef.cnt=1』初期表示位置の情報『ex.cnt,ey.cnt』を代入します。この時『lv』変数を利用して2面等の敵(同じ動きをする物)の表示も可能です。
試しに
*SYOKIKAの『lv=2』にしてみて下さい。表示される敵が変わりますよ。
最後に各敵の初期移動量(X,Y軸各々)と発生からの時間(カウンター)を代入します。
とりあえず、今回は敵の表示だけなので、これで終わりです。


それにしても、こんな説明でお分かりいただけますか!?
下記のスクリプトの一部または全部において転用は自由とさせていただきますので、色々と数字を換えてお試し下さい♪
下記スクリプトをHSPのスクリプトエディターにコピペでお使いいただけます。



 

              
	#define SHOTMAX 2			;自機弾最大数
	#define ENEMYMAX 12			;敵機最大数

	buffer 2,,,1 
	picload "cruiser.bmp"
	screen 0,640,480,1,dispx-640/2,dispy-480/2:cls 4 : title "space cruiser" 
	font "MS 明朝",20 
	gmode 2


*SYOKIKA 
	mx=300 : my=400			;自機の初期位置 
	lv=1				;初期レベル

	dim sf,SHOTMAX			;自弾の有無 
	dim sx,SHOTMAX			;自弾のX座標 
	dim sy,SHOTMAX			;自弾のY座標 

	dim ef,ENEMYMAX			;敵の硬さ
	dim ex,ENEMYMAX			;敵のX座標
	dim ey,ENEMYMAX			;敵のY座標
	dim et,ENEMYMAX			;敵発生からのカウンター
	dim esx,ENEMYMAX			;敵のX軸移動量
	dim esy,ENEMYMAX			;敵のY軸移動量
 
*MAIN					;メインループ 
	palcolor 0 : boxf 0,0,640,480 
	gosub *JIKI 
	gosub *TAMA
	gosub *TEKI 
	redraw 1 : redraw 2 : await 30 
	goto *MAIN 

 
*JIKI					;自機の移動・ショットキーチェック 
	stick bt,5 : k- : if k<1 : if bt&16 : ff=1 : k=3 
	mxv=(bt&4!0):mxv-=(bt&1!0) 
	mx+=mxv*8 
	if mx<0 : mx=0 
	if mx>580 : mx=580 
	pos mx,my : gcopy 2,0,32,64,64 
	return 

 
*TAMA					;自機弾の移動・表示
	repeat SHOTMAX 
	if ff>0 : if sf.cnt=0 : ff- : sf.cnt=1 : sx.cnt=mx+16 : sy.cnt=my-20 
	if sf.cnt=0 : continue 
	sy.cnt-=12 : if sy.cnt<-32 : sf.cnt=0 
	pos sx.cnt,sy.cnt : gcopy 2,96,0,32,32 
	loop 
	return

*TEKI					;敵の出現
	repeat ENEMYMAX
	if cnt<12	{
	if cnt<10	{
	if cnt<8	{
	if cnt<6	{
	if cnt<4	{
	if cnt<2	{	ef.cnt=1 : ex.cnt=cnt*100+100 : ey.cnt=80
			pos ex.cnt,ey.cnt : gcopy 2,lv*32,0,32,32
		}else{	ef.cnt=1 : ex.cnt=cnt-2*100+100 : ey.cnt=130
			pos ex.cnt,ey.cnt : gcopy 2,lv*32,0,32,32	}
		}else{	ef.cnt=1 : ex.cnt=cnt-4*100+100 : ey.cnt=180
			pos ex.cnt,ey.cnt : gcopy 2,lv*32,0,32,32	}
		}else{	ef.cnt=1 : ex.cnt=cnt-5*100+300 : ey.cnt=80
			pos ex.cnt,ey.cnt : gcopy 2,lv*32,0,32,32	}
		}else{	ef.cnt=1 : ex.cnt=cnt-7*100+300 : ey.cnt=130
			pos ex.cnt,ey.cnt : gcopy 2,lv*32,0,32,32	}
		}else{	ef.cnt=1 : ex.cnt=cnt-9*100+300 : ey.cnt=180
			pos ex.cnt,ey.cnt : gcopy 2,lv*32,0,32,32	}
		} 
		esx.cnt=5 : esy.cnt=5 : et.cnt=0
	loop
return
		


↑こんな感じです。とりあえず敵表示だけ追加♪


上手く出来たら、次に行ってみましょう♪

NEXT ->>


管理人 : よっしー

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!